package formulario;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Image;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.LayoutStyle.ComponentPlacement;

import Objetos.Libros;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Iterator;
import java.util.List;

import javax.swing.border.TitledBorder;
import javax.swing.border.LineBorder;
import javax.swing.UIManager;
import java.awt.FlowLayout;
import org.eclipse.wb.swing.FocusTraversalOnArray;
import java.awt.Component;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import java.awt.Panel;
import java.awt.Label;

public class Principal extends JFrame {

	private JPanel contentPane;
    public static int cant = 0;
	/**
	 * Launch the application.
	 */
    
    /** Metodo main, ejecuta nuestra aplicacion*/
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Principal frame = new Principal();
					frame.setResizable(false); //Para que el formulario no cambie de tamano
					frame.setTitle("Control de Libros"); //Establecemos el titulo del formulario
					frame.setVisible(true); //Hacemos visible el formulario
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Principal() {
		setTitle("PRINCIPAL");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 517, 294);
		
		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		
		JMenu mnLibros = new JMenu("Libros");
		menuBar.add(mnLibros);
		
		JMenuItem mntmListaDeLibros = new JMenuItem("Lista de Libros");
		mnLibros.add(mntmListaDeLibros);
		
		JMenuItem mntmEditarLibros = new JMenuItem("Editar libros");
		mnLibros.add(mntmEditarLibros);
		
		JMenuItem mntmBorrarLibro = new JMenuItem("Borrar libro");
		mnLibros.add(mntmBorrarLibro);
		
		JMenuItem mntmIngresarNuevosLibros = new JMenuItem("Ingresar nuevos libros");
		mntmIngresarNuevosLibros.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
			}
		});
		mnLibros.add(mntmIngresarNuevosLibros);
		
		JMenuItem mntmGuardarArchivo = new JMenuItem("Guardar archivo");
		mnLibros.add(mntmGuardarArchivo);
		
		JMenuItem mntmLeerArchivo = new JMenuItem("Leer archivo");
		mnLibros.add(mntmLeerArchivo);
		
		JMenuItem mntmBorrarTodo = new JMenuItem("Borrar todo");
		mnLibros.add(mntmBorrarTodo);
		
		JMenu mnNewMenu = new JMenu("CD's");
		menuBar.add(mnNewMenu);
		
		JMenuItem mntmListaDeCds = new JMenuItem("Lista de CD's");
		mnNewMenu.add(mntmListaDeCds);
		
		JMenuItem mntmEditarCd = new JMenuItem("Editar CD");
		mnNewMenu.add(mntmEditarCd);
		
		JMenuItem mntmBorrarCd = new JMenuItem("Borrar CD");
		mnNewMenu.add(mntmBorrarCd);
		
		JMenuItem mntmIngresarNuevosCds = new JMenuItem("Ingresar nuevos CD's");
		mnNewMenu.add(mntmIngresarNuevosCds);
		
		JMenuItem mntmGuardarArchivo_1 = new JMenuItem("Guardar Archivo");
		mnNewMenu.add(mntmGuardarArchivo_1);
		
		JMenuItem mntmLeerArchivo_1 = new JMenuItem("Leer archivo");
		mnNewMenu.add(mntmLeerArchivo_1);
		
		JMenuItem mntmBorrarTodo_1 = new JMenuItem("Borrar todo");
		mnNewMenu.add(mntmBorrarTodo_1);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		
		JPanel panel_1 = new JPanel();
		panel_1.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Opciones Libros", TitledBorder.CENTER, TitledBorder.TOP, null, new Color(51, 102, 255)));
		panel_1.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
		
				
		JButton btnListarLibros = new JButton("Listar libros");
		panel_1.add(btnListarLibros);
		btnListarLibros.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				ListaLibros lisLibros = new ListaLibros(); //Creamos un objeto qu hace refencia a un formulario
				lisLibros.setTitle("Lista de libros");//Establecemos el Titulo
				lisLibros.setVisible(true);//hacemos vicible el formulario
				lisLibros.setDefaultCloseOperation(lisLibros.DISPOSE_ON_CLOSE);//le decimos que al dar clic en la X
			}
		});
		
		JButton btnNewButton = new JButton("Editar libro");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				/*--Mostramos un Cuadro de Dialogo, en donde el usuario selecciona
				 * Las opciones por las que deas buscar los libros para editarlos
				*/
				
				Object seleccion = JOptionPane.showInputDialog(
						   null,
						   "Seleccione opcion",
						   "Selector de opciones",
						   JOptionPane.QUESTION_MESSAGE,
						   null, new Object[] { "Titulo", "Autor", "Ano","ISBN","Contenido" }, 
						   "Titulo");
				
				//Si selecciona titulo, realiza los respectivo y asi sucesibamente con las demas opciones
				if (seleccion == "Titulo"){
					String dt = JOptionPane.showInputDialog("Digite el Titulo del libro a editar:");
					
					// Obtenemos un Iterador y recorremos la lista.
					Iterator iter = newLibro.list.iterator();
					while (iter.hasNext()){
						Libros lb = (Libros) iter.next();
						if (lb.getTitulo().equals(dt)){
							newLibro frmlibro = new newLibro();
							
							newLibro.txtTitulo.setText(lb.getTitulo());
							newLibro.txtAutor.setText(lb.getAutor());
							newLibro.txtAno.setText(Integer.toString(lb.getAno()));
							newLibro.txtIsbn.setText(lb.getIsbn());
							newLibro.txtContenido.setText(lb.getContenido());
							iter.remove();
							cant = 1;
							frmlibro.setVisible(true);
							frmlibro.setDefaultCloseOperation(frmlibro.DISPOSE_ON_CLOSE);//le decimos que al dar clic en la X
						}
					}
					
				}
				if (seleccion == "Autor"){
					String dt = JOptionPane.showInputDialog("Digite el Autor del libro a editar:");
					
					// Obtenemos un Iterador y recorremos la lista.
					Iterator iter = newLibro.list.iterator();
					while (iter.hasNext()){
						Libros lb = (Libros) iter.next();
						if (lb.getAutor().equals(dt)){
							newLibro frmlibro = new newLibro();
							
							newLibro.txtTitulo.setText(lb.getTitulo());
							newLibro.txtAutor.setText(lb.getAutor());
							newLibro.txtAno.setText(Integer.toString(lb.getAno()));
							newLibro.txtIsbn.setText(lb.getIsbn());
							newLibro.txtContenido.setText(lb.getContenido());
							iter.remove();
							cant = 1;
							frmlibro.setVisible(true);
							frmlibro.setDefaultCloseOperation(frmlibro.DISPOSE_ON_CLOSE);//le decimos que al dar clic en la X
							
						}
					}
				}
				
				if (seleccion == "Ano"){
					int dt = Integer.parseInt(JOptionPane.showInputDialog("Digite el Ano del libro a editar:"));
					
					// Obtenemos un Iterador y recorremos la lista.
					Iterator iter = newLibro.list.iterator();
					while (iter.hasNext()){
						Libros lb = (Libros) iter.next();
						if (lb.getAno() ==(dt)){
							newLibro frmlibro = new newLibro();
							
							newLibro.txtTitulo.setText(lb.getTitulo());
							newLibro.txtAutor.setText(lb.getAutor());
							newLibro.txtAno.setText(Integer.toString(lb.getAno()));
							newLibro.txtIsbn.setText(lb.getIsbn());
							newLibro.txtContenido.setText(lb.getContenido());
							iter.remove();
							cant = 1;
							frmlibro.setVisible(true);
							frmlibro.setDefaultCloseOperation(frmlibro.DISPOSE_ON_CLOSE);//le decimos que al dar clic en la X
							
						}
					}
					
				}				
				if (seleccion == "ISBN"){
					String dt = JOptionPane.showInputDialog("Digite el ISBN del libro a editar:");
					
					// Obtenemos un Iterador y recorremos la lista.
					Iterator iter = newLibro.list.iterator();
					while (iter.hasNext()){
						Libros lb = (Libros) iter.next();
						if (lb.getIsbn().equals(dt)){
							newLibro frmlibro = new newLibro();
							
							newLibro.txtTitulo.setText(lb.getTitulo());
							newLibro.txtAutor.setText(lb.getAutor());
							newLibro.txtAno.setText(Integer.toString(lb.getAno()));
							newLibro.txtIsbn.setText(lb.getIsbn());
							newLibro.txtContenido.setText(lb.getContenido());
							iter.remove();
							cant = 1;
							frmlibro.setVisible(true);
							frmlibro.setDefaultCloseOperation(frmlibro.DISPOSE_ON_CLOSE);//le decimos que al dar clic en la X
							
						}
					}
				}
				if (seleccion == "Contenido"){
					String dt = JOptionPane.showInputDialog("Digite el Contenido del libro a editar:");
					
					// Obtenemos un Iterador y recorremos la lista.
					Iterator iter = newLibro.list.iterator();
					while (iter.hasNext()){
						Libros lb = (Libros) iter.next();
						if (lb.getContenido().equals(dt)){
							newLibro frmlibro = new newLibro();
							
							newLibro.txtTitulo.setText(lb.getTitulo());
							newLibro.txtAutor.setText(lb.getAutor());
							newLibro.txtAno.setText(Integer.toString(lb.getAno()));
							newLibro.txtIsbn.setText(lb.getIsbn());
							newLibro.txtContenido.setText(lb.getContenido());
							iter.remove();
							cant = 1;
							frmlibro.setVisible(true);
							frmlibro.setDefaultCloseOperation(frmlibro.DISPOSE_ON_CLOSE);//le decimos que al dar clic en la X
							
						}
					}
				}				

				

				
			}
		});
		panel_1.add(btnNewButton);
		
		JButton btnBorrasLibro = new JButton("Borras libro");
		panel_1.add(btnBorrasLibro);
		btnBorrasLibro.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				Object seleccion = JOptionPane.showInputDialog(
						   null,
						   "Seleccione opcion",
						   "Selector de opciones",
						   JOptionPane.QUESTION_MESSAGE,
						   null, new Object[] { "Titulo", "Autor", "Ano","ISBN","Contenido" }, 
						   "Titulo");
				
				if (seleccion == "Titulo"){
					String dt = JOptionPane.showInputDialog("Digite el Titulo del libro a eliminar:");
					
					// Obtenemos un Iterador y recorremos la lista.
					Iterator iter = newLibro.list.iterator();
					while (iter.hasNext()){
						Libros lb = (Libros) iter.next();
						if (lb.getTitulo().equals(dt)){
							int op = JOptionPane.showConfirmDialog(null, "Confirme la eliminacion del registro?","Confirmar",JOptionPane.YES_NO_OPTION);
							if (op == 0) { 
								iter.remove();
								JOptionPane.showMessageDialog(null, "Registro borrado...");
								break;
							}else{
								break;
							}
						}
						JOptionPane.showMessageDialog(null, "Datos no encontrados...","Error",JOptionPane.ERROR_MESSAGE);
					}
				}
				if (seleccion == "Autor"){
					String dt = JOptionPane.showInputDialog("Digite el Autor del libro a eliminar:");
					
					// Obtenemos un Iterador y recorremos la lista.
					Iterator iter = newLibro.list.iterator();
					while (iter.hasNext()){
						Libros lb = (Libros) iter.next();
						if (lb.getAutor().equals(dt)){
							int op = JOptionPane.showConfirmDialog(null, "Confirme la eliminacion del registro?","Confirmar",JOptionPane.YES_NO_OPTION);
							if (op == 0) { 
								iter.remove();
								JOptionPane.showMessageDialog(null, "Registro borrado...");
								break;
							}else{
								break;
							}
						}
						JOptionPane.showMessageDialog(null, "Datos no encontrados...","Error",JOptionPane.ERROR_MESSAGE);
					}
				}
				if (seleccion == "Ano"){
					int dt = Integer.parseInt(JOptionPane.showInputDialog("Digite el Ano del libro a eliminar:"));
					
					// Obtenemos un Iterador y recorremos la lista.
					Iterator iter = newLibro.list.iterator();
					while (iter.hasNext()){
						Libros lb = (Libros) iter.next();
						if (lb.getAno()==(dt)){
							int op = JOptionPane.showConfirmDialog(null, "Confirme la eliminacion del registro?","Confirmar",JOptionPane.YES_NO_OPTION);
							if (op == 0) { 
								iter.remove();
								JOptionPane.showMessageDialog(null, "Registro borrado...");
								break;
							}else{
								break;
							}
						}
						JOptionPane.showMessageDialog(null, "Datos no encontrados...","Error",JOptionPane.ERROR_MESSAGE);
					}					
				}
				if (seleccion == "ISBN"){
					String isbn = JOptionPane.showInputDialog("Digite el ISBN del libro a eliminar:");
					
					// Obtenemos un Iterador y recorremos la lista.
					Iterator iter = newLibro.list.iterator();
					while (iter.hasNext()){
						Libros lb = (Libros) iter.next();
						if (lb.getIsbn().equals(isbn)){
							int op = JOptionPane.showConfirmDialog(null, "Confirme la eliminacion del registro?","Confirmar",JOptionPane.YES_NO_OPTION);
							if (op == 0) { 
								iter.remove();
								JOptionPane.showMessageDialog(null, "Registro borrado...");
								break;
							}else{
								break;
							}
						}
						JOptionPane.showMessageDialog(null, "Datos no encontrados...","Error",JOptionPane.ERROR_MESSAGE);
					}	
				}				
				if (seleccion == "Contenido"){
					String dt = JOptionPane.showInputDialog("Digite el Contenido del libro a eliminar:");
					
					// Obtenemos un Iterador y recorremos la lista.
					Iterator iter = newLibro.list.iterator();
					while (iter.hasNext()){
						Libros lb = (Libros) iter.next();
						if (lb.getContenido().equals(dt)){
							int op = JOptionPane.showConfirmDialog(null, "Confirme la eliminacion del registro?","Confirmar",JOptionPane.YES_NO_OPTION);
							if (op == 0) { 
								iter.remove();
								JOptionPane.showMessageDialog(null, "Registro borrado...");
								break;
							}else{
								break;
							}
						}
						JOptionPane.showMessageDialog(null, "Datos no encontrados...","Error",JOptionPane.ERROR_MESSAGE);
					}
				}
				
				
			}
		});
		
		JButton btnIngresarNuevosLibros = new JButton("Ingresar nuevos libros");
		panel_1.add(btnIngresarNuevosLibros);
		
		JButton btnLeerArchivo = new JButton("Leer archivo");
		btnLeerArchivo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				File file = new File("datos.csv");
				try {
					
					//Borramos la Lista Actual
					// Obtenemos un Iterador y recorremos la lista.
					Iterator iter = newLibro.list.iterator();
					while (iter.hasNext()){
						Libros lb = (Libros) iter.next();
						if (!lb.getIsbn().isEmpty()){
							iter.remove();
						}				   
					}//------------------------------------------------------
					
					//Obtenemos el archivo
					FileReader fr = new FileReader (file);
					//cargamos el archivo en memoria para leerlo
					BufferedReader br = new BufferedReader(fr);
					
					String linea; //Definimos la variable que almacenara las lineas
					
					while((linea=br.readLine())!=null){ //Mientras hallan linea parra leer
						String tem[] = linea.split(";"); //guardamos la linea que lee, en un vector, y estos los separa por medio del punto y coma
						
						//Obtenemos los datos del formulario
						String titulo = tem[0].toString();
						String autor = tem[1].toString();
						int ano = Integer.parseInt(tem[2].toString());
						String isbn = tem[3].toString();
						String contenido = tem[4].toString();
						//------------------------------------------
																		
						//Creamos el objeto Libro con los datos dentro
						Libros lib = new Libros(titulo,autor,ano,isbn,contenido);
											
						//Borramos toda la Lista
						
						
						//Adicionamos a la lista
						newLibro.list.add(lib);
					}
				}catch(IOException e){
					JOptionPane.showMessageDialog(null, e);
				}
				//Confirmamos la Carga del Archivo
				JOptionPane.showMessageDialog(null, "Archivo cargado bien...");
			}
		});
		
		JButton btnGuardarArchivo = new JButton("Guardar Archivo");
		btnGuardarArchivo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					//Definimos el archivo en donde se guardaran los datos
					File file = new File("datos.csv");
					//Creamos el Archivo
					BufferedWriter write = new BufferedWriter(new FileWriter(file));
					
					// Obtenemos un Iterador y recorremos la lista.
					Iterator iter = newLibro.list.iterator();
					while (iter.hasNext()){
						Libros lb = (Libros) iter.next(); //Obteneos el objeto de la lista
						write.append(lb.getTitulo()); //Obtenemos su titulo, y lo escribimos
						write.append(';');//Separador
						write.append(lb.getAutor());//Obtenemos el autor, y lo escribimos
						write.append(';');//Separador			
						write.append(""+lb.getAno());//Obtenemos su year, y lo escribimos
						write.append(';');//Separador
						write.append(lb.getIsbn());//Obtenemos su isbn, y lo escribimos
						write.append(';');//Separador
						write.append(lb.getContenido());//Obtenemos su contenido, y lo escribimos
						write.append('\n') ;//Nueva linea en el Archivo
						write.flush();//Guardamos 		
					}
					write.close();//Cerramos el Archivo
					//Confirmamos que fue guardado el archivo
					JOptionPane.showMessageDialog(null, "Archivo guardado...");
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		});
		panel_1.add(btnGuardarArchivo);
		panel_1.add(btnLeerArchivo);
		
		JButton btnBorrarTodo = new JButton("Borrar Todo");
		btnBorrarTodo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//Mostramos un dialogo para que confirme la eliminacion de todos los registros
				int op = JOptionPane.showConfirmDialog(null, "Confirme la eliminacion de todos los registros?","Confirmar",JOptionPane.YES_NO_OPTION);
				if (op == 0 ){// si preciona si 
					// Obtenemos un Iterador y recorremos la lista.
					Iterator iter = newLibro.list.iterator();
					
					while (iter.hasNext()){ //Recorremos toda la lista
						Libros lb = (Libros) iter.next(); //Obtenemos el objeto libro de la lista
						if (!lb.getIsbn().isEmpty()){ //Si el atributo isbn del objeto tiene informacion, borramos el objeto
							iter.remove();
						}				   
					}
					//Mensaje confirmando la eliminacion de todos los registros
					JOptionPane.showMessageDialog(null, "Todos los registros borrados....");
				}
			}
		});
		
		panel_1.add(btnBorrarTodo);
		btnIngresarNuevosLibros.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				//Optenemos la cantidad de libros a ingresar al sistema
				cant = Integer.parseInt(JOptionPane.showInputDialog("Cantidad de libros a ingresar:"));
				
     			newLibro frmlibro = new newLibro();//Creamos un objeto que referencie el formulario de ingreso de libros
     			frmlibro.lblLibro.setText(""+cant); //El label que esta es el formulario frmlibros, le colocamos el valor de libros a ingresar
				frmlibro.setVisible(true); //Lo hacemos visible
				frmlibro.setDefaultCloseOperation(frmlibro.DISPOSE_ON_CLOSE);//le decimos que al dar clic en la X
			}
		});
		
		contentPane.setLayout(new BorderLayout(0, 0));//Definimos el layau del contenedor
		contentPane.add(panel_1, BorderLayout.CENTER); //Agregamos el panel en la parte central del contenedor
		
		Panel panel = new Panel();//Creamos un objeto de Tipo Panel
		contentPane.add(panel, BorderLayout.NORTH); //Lo agragamos al Contenedor, en la parte norte de este
		
		
		ImageIcon imgen = new ImageIcon("images.jpeg"); //Cargamos la Imagen que muestra en el banner
		JLabel label = new JLabel(imgen);//Se la cargamos al Label
		panel.add(label);//Agregamos el Label al formulario

	}
}
